/***************************************************************************
创建者：华磊
 开始时间：               : 2020.1１.09
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   顶部视窗测试用代理类
*                                                                         *
 ***************************************************************************/
#ifndef TOPVIEWDELEGATE_H
#define TOPVIEWDELEGATE_H

#include "topviewdelegate_global.h"
#include <QObject>
#include <QTimer>
#include <QMutex>
#include <QTranslator>
#include <QApplication>
#include "../topview/topview.h"

#include "../CommunicateDelegate/globaldata.h"



/**
 * @brief The TopViewDelegate class　顶部视窗业务逻辑类
 */
class TOPVIEWDELEGATESHARED_EXPORT TopViewDelegate : public QObject
{

    Q_OBJECT
public:
    TopViewDelegate(TopView *topViewIn,GlobalData *globalDataIn,
                    GlobalData *ioDataIn,CommunicateNormalDelegate *communicateNormalIn,QObject* parent=0);
    ~TopViewDelegate();


signals:
    void robotChanged_signal();
    void setBuzzerPlay_signal();
    void showMultiRobotControlDlg_signal();
    /**
     * @brief msgBoxSignal                  通知 打开消息框
     */
    void msgBoxSignal(int type,QString title,QString text);



    /**
     * @brief timerUpdateViewSignal   定时刷新数据 信号 给topview
     */
    void timerUpdateViewSignal();

    /* home 菜单 页面显示*/
    void changeViewIDsignal(int changeViewID);

    /*速度修改部分*/
    /**
     * @brief setAutoSpeedToServerSignal        发送设置的自动速度值给服务器
     * @param currentSpeed
     */
    void setAutoSpeedToServerSignal(float currentSpeed);
    /**
     * @brief setManSpeedToServerSignal         发送设置的手动速度值给服务器
     * @param currentSpeed
     */
    void setManSpeedToServerSignal(float currentSpeed);
    /**
     * @brief setDebugRunModeSignal             发送设置的 单步 连续
     */
    void setDebugRunModeSignal(int DebugMode);

    /**
     * @brief setJointCoordinateSignal          设置手动坐标系
     * @param jointCoordinate
     */
    void setJointCoordinateSignal(int jointCoordinate);

    /**
     * @brief setControlMaunal1Mode             设置运行模式
     * @param controlMaunal
     */
    void setControlMaunalMode(int controlMaunal);
    /**
     * @brief manualChangeSignal        子页面:软件使能 开启关闭 通信:控制器
     * @param onOff
     */
    void manualChangeSignal(int onOff);


    /**
     * @brief setCurrentToolCoordSianal         设置工具
     */
    void setCurrentToolCoordSianal(int currentIndex);
    /**
     * @brief setCurrentUserCoordSianal         设置用户
     */
    void setCurrentUserCoordSianal(int currentIndex);

    /**
     * @brief setRightViewName                  设置右侧 栏界面的名字
     * @param type
     * @param count
     */
//    void setRightViewName_signal(bool isJointShow, int totalAxisCountIn, int pageIdIn, int onePageMaxAxisCount);

public slots:
    void initialRobotList_slot();
    void velIncrease_slot();
    void velDecrease_slot();
    void stepModeChange_slot();
    void jogCoordinateChange_slot();
    void jogCoordinateChangeTool_slot();
    void robotChange_slot();
    void servoOn_slot(int isOn);


    void showMultiRobotControlDlg_slot();
    /**
     * @brief timeUpdateWork            定时刷新
     */
    void timeUpdateWork();

    /**
     * @brief changeAutoSpeedSlot       升高自动速度响应槽函数
     */
    void changeAutoSpeedSlot();
    /**
     * @brief changeMaunalSpeedSlot     升高手动速度响应槽函数
     */
    void changeMaunalSpeedSlot();
    /**
     * @brief reduceAutoSpeedSlot       降低自动速度响应槽函数
     */
    void reduceAutoSpeedSlot();
    /**
     * @brief reduceMaunalSpeedSlot     降低手动速度响应槽函数
     */
    void reduceMaunalSpeedSlot();
    /**
     * @brief sliderAutoSpeedSlot       自动滑动条
     * @param speed
     */
    void sliderAutoSpeedSlot(int speed);
    /**
     * @brief sliderMaunalSpeedSlot     手动滑动条
     * @param speed
     */
    void sliderMaunalSpeedSlot(int speed);

    /**
     * @brief changeCurrentToolCoordinateSlo    t改变当前工具坐标系响应槽函数
     */
    void changeCurrentToolCoordinateSlot(int currentIndex);
    /**
     * @brief changeCurrentUserCoordinateSlot   改变当前用户坐标系响应槽函数
     */
    void changeCurrentUserCoordinateSlot(int currentIndex);
    /**
     * @brief ipoModeFanucSlot              法拉克模式响应槽函数
     */
    void ipoModeFanucSlot();
    /**
     * @brief ipoModeExtraSlot              外部控制模式响应槽函数
     */
    void ipoModeExtraSlot();

    /**
     * @brief changeStepDebugModeSlot       改变单步调试模式响应槽函数
     */
    void changeStepDebugModeSlot();
    /**
     * @brief changeContinueDebugModeSlot   改变连续调试模式响应槽函数
     */
    void changeContinueDebugModeSlot();

    /**
     * @brief controlMaunal1ModeSlot        改变手动T1控制模式响应槽函数
     */
    void controlMaunal1ModeSlot();
    /**
     * @brief controlMaunal2ModeSlot        改变手动T2控制模式响应槽函数
     */
    void controlMaunal2ModeSlot();
    /**
     * @brief controlAutoModeSlot           改变自动控制模式响应槽函数
     */
    void controlAutoModeSlot();
    /**
     * @brief controlExtraModeSlot          改变外部控制响应槽函数
     */
    void controlExtraModeSlot();

    /**
     * @brief controlFleetModeSlot          切換为调度控制模式响应槽函数
     */
    void controlFleetModeSlot();

    /**
     * @brief changeJointCoordinateSlot     改变关节坐标系响应槽函数
     */
    void changeJointCoordinateSlot();
    /**
     * @brief changeUserCoordinateSlot      改变用户坐标系响应槽函数
     */
    void changeUserCoordinateSlot();
    /**
     * @brief changeToolCoordinateSlot      改变工具坐标系响应槽函数
     */
    void changeToolCoordinateSlot();
    /**
     * @brief changeWorldCoordinateSlot     改变世界坐标系响应槽函数
     */
    void changeWorldCoordinateSlot();

    /**
     * @brief showRobotListSlot             显示机器人列表响应槽函数
     */
    void showRobotListSlot();

    /**
     * @brief changeRobotSlot               切换机器人 根据ID编号
     * @param id
     */
    void changeRobotSlot(int id);

    /**
     * @brief showFileNameSlot              显示文件名称槽函数
     */
    void showFileNameSlot();
    /**
     * @brief homeMenuSlot                  主菜单响应槽函数
     */
    void homeMenuSlot();
    /**
     * @brief changeAccountSlot             改变用户响应槽函数
     */
    void changeAccountSlot();
    /**
     * @brief showWindowStatusSlot          显示窗口状态响应槽函数
     */
    //void showWindowStatusSlot();
    /**
     * @brief initialValue                  初始化变量
     */
    void initialValue();

//    void initNewCoordSlot();

    void changeLanguageSlot(int language);

private:
    void initConnect();
    void increaseVel(double &vel);
    void decreaseVel(double &vel);


private:

    /**
     * @brief topView           顶部指针
     */
    TopView *topView;
    /**
     * @brief globalData        公共数据指针
     */
    GlobalData *globalData;
    GlobalData *ioData;

private:

    QTimer *timerUpdate;

    /**
     * @brief tmpConnected      链接状态缓存
     */
    int tmpConnected;
    QTranslator translator;
    CommunicateNormalDelegate *communicateNormal;

};

#endif // TOPVIEWDELEGATE_H
